﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Farmacia.Entities;

using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Data;

using Microsoft.Practices.Unity;
using System.Data;
using System.Data.Common;

namespace Farmacia.DataAccess
{
    public class ProductoDAO:MasterDAEL,iProductoDAO
    {
        [Dependency]
        public iProveedorDAO ProveedorDAO {get; set;}
        List<Proveedor> listProveedor;

        [Dependency]
        public iProductoAlmacenDAO productoAlmacenadoDAO { get; set; }

        public List<Producto> GetFromProductoByProveedor(string Proveedor)
        {
            throw new NotImplementedException();

        }

        public void RegistrarProducto(Producto producto)
        {
            DbCommand command = DataBase.GetStoredProcCommand("RegistrarProducto");
 
            DataBase.AddInParameter(command, "IdProducto", DbType.Int32, producto.IdProducto);
            DataBase.AddInParameter(command, "IdProveedor", DbType.Int32, producto.Proveedor);
            DataBase.AddInParameter(command, "Descripcion", DbType.String, producto.Descripcion);
            DataBase.AddInParameter(command, "PrecioVentaUnidad", DbType.String, producto.PrecioVentaUnidad);
            DataBase.AddInParameter(command, "PrecioVentSubUnd ", DbType.Decimal, producto.PrecioVentaSubUnidad);
            DataBase.AddInParameter(command, "IdLaboratorio", DbType.Decimal, producto.Laboratorio);
            DataBase.AddInParameter(command, "IdGrupoFarmacologico", DbType.Boolean, producto.GrupoFarmacologico);
            DataBase.AddInParameter(command, "IdPrincipioActivo", DbType.Boolean, producto.PrincActivo);
            DataBase.ExecuteNonQuery(command);
        }

        public void DeleteProducto(int id)
        {
            DbCommand command = DataBase.GetStoredProcCommand("DeleteProducto");
            DataBase.AddInParameter(command, "idProducto", DbType.Int32, id);
            DataBase.ExecuteNonQuery(command);
        }


        public List<Producto> GetFromProductoByCodigo(string Codigo)
        {
            var query = DataBase.ExecuteSprocAccessor<Producto>("GetFromProductByCodigo", Codigo);
            return query.ToList();
        }

        public Producto GetFromProductobyId(int id)
        {
            var query = DataBase.ExecuteSprocAccessor<Producto>("GetAllFromProductoDTObyCodigo", id);
            return query.SingleOrDefault();
        }


        public List<Producto> GetFromProductoByNombreAndProveedor(string Criterio, int Proveedor)
        {
            object[] param = new object[2];
            param[0] = Criterio;
            param[1] = Proveedor;

            var query = DataBase.ExecuteSprocAccessor<Producto>("GetFromProductoByNombreAndProveedor", param);
            return query.ToList();
        }




        public List<ProdStockbyAlmacen> GetFromProdStockbyIdProductoStockTotal(int IdProducto)
        {
            var query = DataBase.ExecuteSprocAccessor<ProdStockbyAlmacen>("GetFromProdStockbyIdProductoStockTotal",IdProducto);
            return query.ToList();
        }

        public List<Producto> GetAllFromPrudcto()
        {
            var query = DataBase.ExecuteSprocAccessor<Producto>("GetAllFromProducto");
            return query.ToList();
        }

      /*  List<Produc> iProductoDAO.GetFromProductoByProveedor(string Proveedor)
        {
            throw new NotImplementedException();
        }

        List<Produc> iProductoDAO.GetFromProductoByCodigo(string Codigo)
        {
            throw new NotImplementedException();
        }

        List<Produc> iProductoDAO.GetFromProductoByNombreAndProveedor(string Criterio, int Proveedor)
        {
            throw new NotImplementedException();
        }
*/
      


        public List<Producto> GetFromProdbyCriterioAndLaboratorioANDPrincipioActivoANDGrupoFarmacologicoANDPROVEEDOR(string Criterio, string Laboratorio, string PrincAct, string GrupFarm, string Proveedor)
        {
            object[] param = new object[5];
            param[0] = Criterio;
            param[1] = Laboratorio;
            param[2] = PrincAct;
            param[3] = GrupFarm;
            param[4] = Proveedor;

            var query = DataBase.ExecuteSprocAccessor<Producto>("GetFromProdbyCriterioAndLaboratorioANDPrincipioActivoANDGrupoFarmacologicoANDPROVEEDOR", param);
            return query.ToList();
        }


        public List<Producto> GetAllFromProductoDTObyCodigo(int IdProducto)
        {
            var query = DataBase.ExecuteSprocAccessor<Producto>("GetAllFromProductoDTObyCodigo",IdProducto);
            return query.ToList();
        }


        public Producto GetFromProductoDTObyCodigo(int IdProducto)
        {
            var query = DataBase.ExecuteSprocAccessor<Producto>("GetAllFromProductoDTObyCodigo", IdProducto);
            return query.SingleOrDefault();
        }


        public List<ProdStockbyAlmacen> GetFromProdAlmacenadoStockTotalbyIdProducto(int IdProducto)
        {
            var query = DataBase.ExecuteSprocAccessor<ProdStockbyAlmacen>("GetFromProdAlmacenadoStockTotalbyIdProducto", IdProducto);
            return query.ToList();
        }



        public List<StockporAlmacen> GetProdStockbyAlmacen(int IdAlmcen, int IdProducto)
        {
            object[] param = new object[2];
            param[0] = IdAlmcen;
            param[1] = IdProducto;

            var query = DataBase.ExecuteSprocAccessor<StockporAlmacen>("GetProdStockbyAlmacen", param);
            return query.ToList();
        }


        public Produc GetAllFromProductobyCodigo(int IdProducto)
        {
            var query = DataBase.ExecuteSprocAccessor<Produc>("GetAllFromProductobyCodigo", IdProducto);
            return query.SingleOrDefault();
        }
    }
}
